// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef UI_WM_CORE_NATIVE_CURSOR_MANAGER_H_
#define UI_WM_CORE_NATIVE_CURSOR_MANAGER_H_

#include "base/strings/string16.h"
#include "ui/base/cursor/cursor.h"
#include "ui/wm/core/native_cursor_manager_delegate.h"
#include "ui/wm/wm_export.h"

namespace gfx {
class Display;
}

namespace wm {

// Interface where platforms such as Ash or Desktop aura are notified of
// requested changes to cursor state. When requested, implementer should tell
// the CursorManager of any actual state changes performed through the
// delegate.
class WM_EXPORT NativeCursorManager {
public:
    virtual ~NativeCursorManager() { }

    // A request to set the screen DPI. Can cause changes in the current cursor.
    virtual void SetDisplay(
        const gfx::Display& display,
        NativeCursorManagerDelegate* delegate)
        = 0;

    // A request to set the cursor to |cursor|. At minimum, implementer should
    // call NativeCursorManagerDelegate::CommitCursor() with whatever cursor is
    // actually used.
    virtual void SetCursor(
        gfx::NativeCursor cursor,
        NativeCursorManagerDelegate* delegate)
        = 0;

    // A request to set the visibility of the cursor. At minimum, implementer
    // should call NativeCursorManagerDelegate::CommitVisibility() with whatever
    // the visibility is.
    virtual void SetVisibility(
        bool visible,
        NativeCursorManagerDelegate* delegate)
        = 0;

    // A request to set the cursor set.
    virtual void SetCursorSet(
        ui::CursorSetType cursor_set,
        NativeCursorManagerDelegate* delegate)
        = 0;

    // A request to set whether mouse events are disabled. At minimum,
    // implementer should call NativeCursorManagerDelegate::
    // CommitMouseEventsEnabled() with whether mouse events are actually enabled.
    virtual void SetMouseEventsEnabled(
        bool enabled,
        NativeCursorManagerDelegate* delegate)
        = 0;
};

} // namespace wm

#endif // UI_WM_CORE_NATIVE_CURSOR_MANAGER_H_
